ACME 证书自动续期

序言

  在部署网站或服务时,启用 HTTPS 已成为必不可少的安全措施。申请 SSL/TLS 证书的方式有很多,其中 Let’s Encrypt 提供了免费且自动化的证书签发服务,适合大多数场景。为了简化证书的申请、安装和续期流程,Github 社区开发了轻量级的自动化工具 acme.sh,支持多家 DNS 服务商的 API 验证,可以实现完全无人值守的证书管理。

  本文将以 腾讯云 DNS 为例,介绍如何通过 acme.sh 脚本自动化申请并配置 SSL 证书,确保网站在使用 HTTPS 时既安全又省心。

操作指南

1. 获取腾讯云 DNS API 密钥

  • 登录 腾讯云控制台访问管理API 密钥管理
  • 创建新密钥(或使用现有密钥),记录:
    • SecretId (如 AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******)
    • SecretKey (如 Gu5t9xGARNpq86cd98joQYCN3*******)

注意:建议创建一个子账户做权限隔离。

2. 安装 acme.sh

1
2
3
4
5
6
# 安装(使用独立脚本避免权限问题)
# 下载仓库
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
# 注意替换为自己的邮箱,随便填的邮箱后续步骤会出错
./acme.sh --install -m example@qq.com

3. 配置腾讯云 API 密钥

1
2
3
4
# 将密钥写入 acme.sh 配置(永久存储)
export Tencent_SecretId="AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******"
export Tencent_SecretKey="Gu5t9xGARNpq86cd98joQYCN3*******"
acme.sh --set-default-ca --server letsencrypt # 使用 Let's Encrypt 作为 CA
1
2
# 重新加载环境变量
source ~/.bashrc

其他厂商可以参考:https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_tencent

4. 申请证书(DNS API 验证)

1
2
3
# 为域名 example.com 申请证书(通配符域名需加 *.),Let's Encrypt 通配符证书免费,支持多级域名
#acme.sh --issue --dns dns_tencent -d example.com -d *.example.com
acme.sh --issue --dns dns_tencent -d leeqingshui.com -d *.leeqingshui.com
  • 自动完成验证:acme.sh 会调用腾讯云 API 添加 _acme-challenge.leeqingshui.com 的 TXT 记录。
  • 证书位置~/.acme.sh/leeqingshui.com/

5. 安装证书到 Web 服务器

示例

1
2
3
4
5
# 示例:复制证书到 Nginx 目录
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--reloadcmd "systemctl reload nginx" # 证书更新后自动重载服务

demo

1
2
3
4
5
# 示例:复制证书到 Nginx 目录
acme.sh --install-cert -d leeqingshui.com \
--key-file /etc/nginx/ssl/leeqingshui.com.key \
--fullchain-file /etc/nginx/ssl/leeqingshui.com.crt \
--reloadcmd "systemctl reload nginx" # 证书更新后自动重载服务

6. 验证自动续期

1
2
3
4
5
# 手动模拟续期测试
acme.sh --renew -d example.com --force

# 查看定时任务(自动续期)
crontab -l

输出示例(每天自动检查续期):

1
0 0 * * * "/root/.acme.sh"/acme.sh --cron

关键配置说明

项目 说明
API 密钥 DNSPod.Full 权限(权限文档)
通配符证书 使用 -d *.example.com 申请
证书目录 勿直接使用 ~/.acme.sh/ 中的文件(续期时会更新),应通过 --install-cert 复制
多域名支持 添加多个 -d 参数(如 -d example.com -d api.example.com)
0%